package com.weilx959.spt.core.interfaces;

import com.weilx959.spt.core.config.Config;
import com.weilx959.spt.core.constants.ThemeEnum;
import com.weilx959.spt.core.utils.StringUtil;
import javafx.scene.Node;

import java.util.Collections;
import java.util.List;

/**
 * 插件基础接口
 *
 * @author weilx
 * @since 2024-04-16
 */
public interface SPTPlugin {

    /**
     * 获取插件ID（唯一标识）
     *
     * @return 插件ID
     */
    String getID();

    /**
     * 获取插件名称
     *
     * @return 插件名称
     */
    String getName();

    String getDescription();

    default String getIconPath() {
        return null;
    }

    /**
     * 获取样式表
     *
     * @param theme 主题
     * @return {@link List }<{@link String }>
     */
    default List<String> getStylesheets(ThemeEnum theme) {
        return Collections.emptyList();
    }

    /**
     * 获取图标样式类
     * @return {@link String}
     */
    default String getIconStyle() {
        return StringUtil.convertToCssClass(getName());
    }

    default String getVersion() {
        return null;
    }

    default String getAuthor() {
        return null;
    }

    default String getWebsite() {
        return null;
    }

    /**
     * 获取视图控制器
     *
     * @return {@link Controller}
     */
    Controller getController();

    /**
     * 获取视图
     *
     * @return {@link Node}
     */
    Node getView();

    /**
     * 获取配置
     *
     * @return {@link Config}
     */
    default Config getConfig() {
        return null;
    }

    default Integer getOrder() {
        return Integer.MAX_VALUE >> 1;
    }
}
